function KKB.Panel_Vehicles( Panel )
	Panel_Vehicles = Panel
	Panel_Vehicles:SetSize(100, 400)
	Panel_Vehicles:Clear(true)
	Panel_Vehicles.contents = vgui.Create("DListLayout")
	Panel_Vehicles.contents:Clear()
	
	KKB.Vehicles_GroupList = vgui.Create( "DListView" )
	KKB.Vehicles_GroupList:AddColumn( "User Group" )
	KKB.Vehicles_GroupList:SetTall( 150 )
	KKB.Vehicles_GroupList:SetMultiSelect( true )
	function KKB.Vehicles_Reload_GroupList()
		KKB.Vehicles_GroupList:Clear()
		for k,_ in pairs(KKB.UserGroups) do
			KKB.Vehicles_GroupList:AddLine(k)
		end
	end
	KKB.Vehicles_Reload_GroupList()
	Panel_Vehicles:AddPanel(KKB.Vehicles_GroupList)
	
	local AddGroupButton = vgui.Create( "DButton" )
	AddGroupButton:SetText( "Add Group(s) To Selected Vehicle" )
	AddGroupButton.DoClick = function( button )
		local TreeItem = Panel_Vehicles.VehicleTree:GetSelectedItem()
		if ( TreeItem != nil ) then
			local SelectedLines = KKB.Vehicles_GroupList:GetSelected()
			if ( #SelectedLines > 0 ) then
				local Vehicle = TreeItem:GetText()
				local Groups = {}
				for _,v in pairs(SelectedLines) do
					local Group = v.Columns[1]:GetValue()
					if ( KKB.VehicleRestrictions[Vehicle] == nil or not table.HasValue(KKB.VehicleRestrictions[Vehicle].Groups, Group) ) then
						table.insert(Groups, Group)
					end
				end
				if ( #Groups > 0 ) then
					net.Start( "KKB_Vehicle_Add" )
					net.WriteTable( Groups )
					net.WriteString( Vehicle )
					net.SendToServer()
				end
			end
		end
	end
	Panel_Vehicles:AddPanel(AddGroupButton)
	
	Panel_Vehicles.VehicleTree = vgui.Create( "DTree" )
	Panel_Vehicles.VehicleTree:SetPadding( 5 )
	Panel_Vehicles.VehicleTree:SetTall( 400 )
	local VehicleName = nil
	local Categorys = {}
	for k,v in pairs(table.Merge( list.Get("Vehicles"),list.Get( "SCarVehicles" ) )) do
		local Category = v.Category or "Other"
		if ( Categorys[Category] == nil ) then
			local Node = Panel_Vehicles.VehicleTree:AddNode( Category )
			Node.DoClick = function( Item )
				Item:SetSelected( false )
			end
			Categorys[Category] = Node
		end
		local Vehicle = Categorys[Category]:AddNode( k )
		Vehicle.DoClick = function( Item )
			Panel_Vehicles.AllowedGroupList:Clear()
			VehicleName = Item:GetText()
			if ( KKB.VehicleRestrictions[VehicleName] != nil ) then
				Panel_Vehicles.PhysgunCheck:SetValue(KKB.VehicleRestrictions[VehicleName].Options.Physgun)
				Panel_Vehicles.ToolgunCheck:SetValue(KKB.VehicleRestrictions[VehicleName].Options.Toolgun)
				Panel_Vehicles.GravcannonCheck:SetValue(KKB.VehicleRestrictions[VehicleName].Options.Gravcannon)
				Panel_Vehicles.UseCheck:SetValue(KKB.VehicleRestrictions[VehicleName].Options.Use)
				Panel_Vehicles.DamageCheck:SetValue(KKB.VehicleRestrictions[VehicleName].Options.Damage)
				Panel_Vehicles.EnterCheck:SetValue(KKB.VehicleRestrictions[VehicleName].Options.Enter)
				Panel_Vehicles.AllowedGroupList:Clear()
				for _,v in pairs(KKB.VehicleRestrictions[VehicleName].Groups) do
					Panel_Vehicles.AllowedGroupList:AddLine(v)
				end
			end
		end
	end
	Panel_Vehicles:AddPanel(Panel_Vehicles.VehicleTree)
	
	Panel_Vehicles.AllowedGroupList = vgui.Create( "DListView" )
	Panel_Vehicles.AllowedGroupList:AddColumn( "Allowed User Group" )
	Panel_Vehicles.AllowedGroupList:SetTall( 150 )
	Panel_Vehicles.AllowedGroupList:SetMultiSelect( true )
	function KKB.Vehicles_Reload_AllowedGroups()
		Panel_Vehicles.AllowedGroupList:Clear()
		if ( VehicleName != nil ) then
			for _,v in pairs(KKB.VehicleRestrictions[VehicleName].Groups) do
				Panel_Vehicles.AllowedGroupList:AddLine(v)
			end
		end
	end
	Panel_Vehicles:AddPanel(Panel_Vehicles.AllowedGroupList)
	
	local RemoveGroupButton = vgui.Create( "DButton" )
	RemoveGroupButton:SetText( "Remove Group(s) From Selected Vehicle" )
	RemoveGroupButton.DoClick = function( button )
		local TreeItem = Panel_Vehicles.VehicleTree:GetSelectedItem()
		if ( TreeItem != nil ) then
			local SelectedLines = KKB.Vehicles_GroupList:GetSelected()
			if ( #SelectedLines > 0 ) then
				local Vehicle = TreeItem:GetText()
				local Groups = {}
				for _,v in pairs(SelectedLines) do
					local Group = v.Columns[1]:GetValue()
					if ( KKB.VehicleRestrictions[Vehicle] != nil and table.HasValue(KKB.VehicleRestrictions[Vehicle].Groups, Group) ) then
						table.insert(Groups, Group)
					end
				end
				if ( #Groups > 0 ) then
					net.Start( "KKB_Vehicle_Delete" )
					net.WriteTable( Groups )
					net.WriteString( Vehicle )
					net.SendToServer()
				end
			end
		end
	end
	Panel_Vehicles:AddPanel(RemoveGroupButton)
	
	Panel_Vehicles.BlacklistCheck = vgui.Create("DCheckBoxLabel")
	Panel_Vehicles.BlacklistCheck:SetText("Blacklist?")
	Panel_Vehicles.BlacklistCheck:SetTextColor( Color(0, 0, 0, 255) )
	Panel_Vehicles.BlacklistCheck:SetValue(KKB.Settings.Vehicles.Blacklist)
	Panel_Vehicles.BlacklistCheck.OnChange = function( _, fVal )
		if ( KKB.Settings.Vehicles.Blacklist != fVal ) then
			net.Start( "KKB_Settings_Update" )
			net.WriteString( "Vehicles" )
			net.WriteString( "Blacklist" )
			net.WriteUInt( KKB.BoolToInt(fVal), 32 )
			net.SendToServer()
		end
	end
	Panel_Vehicles:AddPanel(Panel_Vehicles.BlacklistCheck)
	Panel_Vehicles:AddControl("Label", {Text = ""})
	
	Panel_Vehicles.PhysgunCheck = vgui.Create("DCheckBoxLabel")
	Panel_Vehicles.PhysgunCheck:SetText("Physgun")
	Panel_Vehicles.PhysgunCheck:SetTextColor( Color(0, 0, 0, 255) )
	Panel_Vehicles.PhysgunCheck.OnChange = function( _, fVal )
		local TreeItem = Panel_Vehicles.VehicleTree:GetSelectedItem()
		if ( TreeItem != nil ) then
			local Vehicle = TreeItem:GetText()
			if ( KKB.VehicleRestrictions[Vehicle] != nil ) then
				if ( KKB.VehicleRestrictions[Vehicle].Options.Physgun != fVal ) then
					net.Start( "KKB_Vehicle_Update" )
					net.WriteString( Vehicle )
					net.WriteString( "Physgun" )
					net.WriteUInt( KKB.BoolToInt(fVal), 32 )
					net.SendToServer()
				end
			end
		end
	end
	Panel_Vehicles:AddControl("Label", {Text = "Determines What Can Interact With This Vehicle"})
	Panel_Vehicles:AddPanel(Panel_Vehicles.PhysgunCheck)
	
	Panel_Vehicles.ToolgunCheck = vgui.Create("DCheckBoxLabel")
	Panel_Vehicles.ToolgunCheck:SetText("Toolgun")
	Panel_Vehicles.ToolgunCheck:SetTextColor( Color(0, 0, 0, 255) )
	Panel_Vehicles.ToolgunCheck.OnChange = function( _, fVal )
		local TreeItem = Panel_Vehicles.VehicleTree:GetSelectedItem()
		if ( TreeItem != nil ) then
			local Vehicle = TreeItem:GetText()
			if ( KKB.VehicleRestrictions[Vehicle] != nil ) then
				if ( KKB.VehicleRestrictions[Vehicle].Options.Toolgun != fVal ) then
					net.Start( "KKB_Vehicle_Update" )
					net.WriteString( Vehicle )
					net.WriteString( "Toolgun" )
					net.WriteUInt( KKB.BoolToInt(fVal), 32 )
					net.SendToServer()
				end
			end
		end
	end
	Panel_Vehicles:AddPanel(Panel_Vehicles.ToolgunCheck)
	
	Panel_Vehicles.GravcannonCheck = vgui.Create("DCheckBoxLabel")
	Panel_Vehicles.GravcannonCheck:SetText("Gravcannon")
	Panel_Vehicles.GravcannonCheck:SetTextColor( Color(0, 0, 0, 255) )
	Panel_Vehicles.GravcannonCheck.OnChange = function( _, fVal )
		local TreeItem = Panel_Vehicles.VehicleTree:GetSelectedItem()
		if ( TreeItem != nil ) then
			local Vehicle = TreeItem:GetText()
			if ( KKB.VehicleRestrictions[Vehicle] != nil ) then
				if ( KKB.VehicleRestrictions[Vehicle].Options.Gravcannon != fVal ) then
					net.Start( "KKB_Vehicle_Update" )
					net.WriteString( Vehicle )
					net.WriteString( "Gravcannon" )
					net.WriteUInt( KKB.BoolToInt(fVal), 32 )
					net.SendToServer()
				end
			end
		end
	end
	Panel_Vehicles:AddPanel(Panel_Vehicles.GravcannonCheck)
	
	Panel_Vehicles.UseCheck = vgui.Create("DCheckBoxLabel")
	Panel_Vehicles.UseCheck:SetText("Use")
	Panel_Vehicles.UseCheck:SetTextColor( Color(0, 0, 0, 255) )
	Panel_Vehicles.UseCheck.OnChange = function( _, fVal )
		local TreeItem = Panel_Vehicles.VehicleTree:GetSelectedItem()
		if ( TreeItem != nil ) then
			local Vehicle = TreeItem:GetText()
			if ( KKB.VehicleRestrictions[Vehicle] != nil ) then
				if ( KKB.VehicleRestrictions[Vehicle].Options.Use != fVal ) then
					net.Start( "KKB_Vehicle_Update" )
					net.WriteString( Vehicle )
					net.WriteString( "Use" )
					net.WriteUInt( KKB.BoolToInt(fVal), 32 )
					net.SendToServer()
				end
			end
		end
	end
	Panel_Vehicles:AddPanel(Panel_Vehicles.UseCheck)
	
	Panel_Vehicles.DamageCheck = vgui.Create("DCheckBoxLabel")
	Panel_Vehicles.DamageCheck:SetText("Damage")
	Panel_Vehicles.DamageCheck:SetTextColor( Color(0, 0, 0, 255) )
	Panel_Vehicles.DamageCheck.OnChange = function( _, fVal )
		local TreeItem = Panel_Vehicles.VehicleTree:GetSelectedItem()
		if ( TreeItem != nil ) then
			local Vehicle = TreeItem:GetText()
			if ( KKB.VehicleRestrictions[Vehicle] != nil ) then
				if ( KKB.VehicleRestrictions[Vehicle].Options.Damage != fVal ) then
					net.Start( "KKB_Vehicle_Update" )
					net.WriteString( Vehicle )
					net.WriteString( "Damage" )
					net.WriteUInt( KKB.BoolToInt(fVal), 32 )
					net.SendToServer()
				end
			end
		end
	end
	Panel_Vehicles:AddPanel(Panel_Vehicles.DamageCheck)
	
	Panel_Vehicles.EnterCheck = vgui.Create("DCheckBoxLabel")
	Panel_Vehicles.EnterCheck:SetText("Enter")
	Panel_Vehicles.EnterCheck:SetTextColor( Color(0, 0, 0, 255) )
	Panel_Vehicles.EnterCheck.OnChange = function( _, fVal )
		local TreeItem = Panel_Vehicles.VehicleTree:GetSelectedItem()
		if ( TreeItem != nil ) then
			local Vehicle = TreeItem:GetText()
			if ( KKB.VehicleRestrictions[Vehicle] != nil ) then
				if ( KKB.VehicleRestrictions[Vehicle].Options.Enter != fVal ) then
					net.Start( "KKB_Vehicle_Update" )
					net.WriteString( Vehicle )
					net.WriteString( "Enter" )
					net.WriteUInt( KKB.BoolToInt(fVal), 32 )
					net.SendToServer()
				end
			end
		end
	end
	Panel_Vehicles:AddPanel(Panel_Vehicles.EnterCheck)
end